from moviepy.editor import *
import os

def create_video_from_images_and_audio(audio_path, image_info, output_path):
    """
    创建一个视频，将给定的音频文件和图片按指定时间合成。

    :param audio_path: MP3文件的路径
    :param image_info: 包含图片路径和显示时间的列表，格式为 [(image_path, start_time, end_time), ...]
    :param output_path: 输出视频文件的路径
    """
    # 加载音频文件
    audio = AudioFileClip(audio_path)

    # 创建视频片段列表
    video_clips = []

    for img_path, start_time, end_time in image_info:
        # 加载图片
        img_clip = ImageClip(img_path).set_duration(end_time - start_time)
        # 设置图片在视频中的开始时间
        img_clip = img_clip.set_start(start_time)
        video_clips.append(img_clip)

    # 将所有视频片段合并
    final_clip = CompositeVideoClip(video_clips)

    # 设置视频的音频
    final_clip = final_clip.set_audio(audio)

    # 设置视频的总时长为音频的时长
    final_clip = final_clip.set_duration(audio.duration)

    # 写入视频文件
    final_clip.write_videofile(output_path, fps=24)

